//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS CodePipeline service.
///
/// CodePipeline  Overview  This is the CodePipeline API Reference. This guide provides descriptions of the actions and data types for CodePipeline. Some functionality for your pipeline can only be configured through the API. For more information, see the CodePipeline User Guide. You can use the CodePipeline API to work with pipelines, stages, actions, and transitions.  Pipelines are models of automated release processes. Each pipeline is uniquely named, and consists of stages, actions, and transitions.  You can work with pipelines by calling:    CreatePipeline, which creates a uniquely named pipeline.    DeletePipeline, which deletes the specified pipeline.    GetPipeline, which returns information about the pipeline structure and pipeline metadata, including the pipeline Amazon Resource Name (ARN).    GetPipelineExecution, which returns information about a specific execution of a pipeline.    GetPipelineState, which returns information about the current state of the stages and actions of a pipeline.    ListActionExecutions, which returns action-level details for past executions. The details include full stage and action-level details, including individual action duration, status, any errors that occurred during the execution, and input and output artifact location details.    ListPipelines, which gets a summary of all of the pipelines associated with your account.    ListPipelineExecutions, which gets a summary of the most recent executions for a pipeline.    StartPipelineExecution, which runs the most recent revision of an artifact through the pipeline.    StopPipelineExecution, which stops the specified pipeline execution from continuing through the pipeline.    UpdatePipeline, which updates a pipeline with edits or changes to the structure of the pipeline.   Pipelines include stages. Each stage contains one or more actions that must complete before the next stage begins. A stage results in success or failure. If a stage fails, the pipeline stops at that stage and remains stopped until either a new version of an artifact appears in the source location, or a user takes action to rerun the most recent artifact through the pipeline. You can call GetPipelineState, which displays the status of a pipeline, including the status of stages in the pipeline, or GetPipeline, which returns the entire structure of the pipeline, including the stages of that pipeline. For more information about the structure of stages and actions, see CodePipeline Pipeline Structure Reference. Pipeline stages include actions that are categorized into categories such as source or build actions performed in a stage of a pipeline. For example, you can use a source action to import artifacts into a pipeline from a source such as Amazon S3. Like stages, you do not work with actions directly in most cases, but you do define and interact with actions when working with pipeline operations such as CreatePipeline and GetPipelineState. Valid action categories are:   Source   Build   Test   Deploy   Approval   Invoke   Compute   Pipelines also include transitions, which allow the transition of artifacts from one stage to the next in a pipeline after the actions in one stage complete. You can work with transitions by calling:    DisableStageTransition, which prevents artifacts from transitioning to the next stage in a pipeline.    EnableStageTransition, which enables transition of artifacts between stages in a pipeline.     Using the API to integrate with CodePipeline  For third-party integrators or developers who want to create their own integrations with CodePipeline, the expected sequence varies from the standard API user. To integrate with CodePipeline, developers need to work with the following items:  Jobs, which are instances of an action. For example, a job for a source action might import a revision of an artifact from a source.  You can work with jobs by calling:    AcknowledgeJob, which confirms whether a job worker has received the specified job.    GetJobDetails, which returns the details of a job.    PollForJobs, which determines whether there are any jobs to act on.    PutJobFailureResult, which provides details of a job failure.     PutJobSuccessResult, which provides details of a job success.    Third party jobs, which are instances of an action created by a partner action and integrated into CodePipeline. Partner actions are created by members of the Amazon Web Services Partner Network. You can work with third party jobs by calling:    AcknowledgeThirdPartyJob, which confirms whether a job worker has received the specified job.    GetThirdPartyJobDetails, which requests the details of a job for a partner action.    PollForThirdPartyJobs, which determines whether there are any jobs to act on.     PutThirdPartyJobFailureResult, which provides details of a job failure.    PutThirdPartyJobSuccessResult, which provides details of a job success.
public struct CodePipeline: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the CodePipeline client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            amzTarget: "CodePipeline_20150709",
            serviceName: "CodePipeline",
            serviceIdentifier: "codepipeline",
            serviceProtocol: .json(version: "1.1"),
            apiVersion: "2015-07-09",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: CodePipelineErrorType.self,
            xmlNamespace: "http://codepipeline.amazonaws.com/doc/2015-07-09/",
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.fips]: .init(endpoints: [
            "ca-central-1": "codepipeline-fips.ca-central-1.amazonaws.com",
            "us-east-1": "codepipeline-fips.us-east-1.amazonaws.com",
            "us-east-2": "codepipeline-fips.us-east-2.amazonaws.com",
            "us-gov-east-1": "codepipeline-fips.us-gov-east-1.amazonaws.com",
            "us-gov-west-1": "codepipeline-fips.us-gov-west-1.amazonaws.com",
            "us-west-1": "codepipeline-fips.us-west-1.amazonaws.com",
            "us-west-2": "codepipeline-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Returns information about a specified job and whether that job has been received by the job worker. Used for custom actions only.
    @Sendable
    @inlinable
    public func acknowledgeJob(_ input: AcknowledgeJobInput, logger: Logger = AWSClient.loggingDisabled) async throws -> AcknowledgeJobOutput {
        try await self.client.execute(
            operation: "AcknowledgeJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a specified job and whether that job has been received by the job worker. Used for custom actions only.
    ///
    /// Parameters:
    ///   - jobId: The unique system-generated ID of the job for which you want to confirm receipt.
    ///   - nonce: A system-generated random number that CodePipeline uses to ensure that the job is being worked on by only one job worker. Get this number from the response of the PollForJobs request that returned this job.
    ///   - logger: Logger use during operation
    @inlinable
    public func acknowledgeJob(
        jobId: String,
        nonce: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AcknowledgeJobOutput {
        let input = AcknowledgeJobInput(
            jobId: jobId, 
            nonce: nonce
        )
        return try await self.acknowledgeJob(input, logger: logger)
    }

    /// Confirms a job worker has received the specified job. Used for partner actions only.
    @Sendable
    @inlinable
    public func acknowledgeThirdPartyJob(_ input: AcknowledgeThirdPartyJobInput, logger: Logger = AWSClient.loggingDisabled) async throws -> AcknowledgeThirdPartyJobOutput {
        try await self.client.execute(
            operation: "AcknowledgeThirdPartyJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Confirms a job worker has received the specified job. Used for partner actions only.
    ///
    /// Parameters:
    ///   - clientToken: The clientToken portion of the clientId and clientToken pair used to verify that the calling entity is allowed access to the job and its details.
    ///   - jobId: The unique system-generated ID of the job.
    ///   - nonce: A system-generated random number that CodePipeline uses to ensure that the job is being worked on by only one job worker. Get this number from the response to a GetThirdPartyJobDetails request.
    ///   - logger: Logger use during operation
    @inlinable
    public func acknowledgeThirdPartyJob(
        clientToken: String,
        jobId: String,
        nonce: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AcknowledgeThirdPartyJobOutput {
        let input = AcknowledgeThirdPartyJobInput(
            clientToken: clientToken, 
            jobId: jobId, 
            nonce: nonce
        )
        return try await self.acknowledgeThirdPartyJob(input, logger: logger)
    }

    /// Creates a new custom action that can be used in all pipelines associated with the Amazon Web Services account. Only used for custom actions.
    @Sendable
    @inlinable
    public func createCustomActionType(_ input: CreateCustomActionTypeInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateCustomActionTypeOutput {
        try await self.client.execute(
            operation: "CreateCustomActionType", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new custom action that can be used in all pipelines associated with the Amazon Web Services account. Only used for custom actions.
    ///
    /// Parameters:
    ///   - category: The category of the custom action, such as a build action or a test action.
    ///   - configurationProperties: The configuration properties for the custom action.  You can refer to a name in the configuration properties of the custom action within the URL templates by following the format of {Config:name}, as long as the configuration property is both required and not secret. For more information, see Create a Custom Action for a Pipeline.
    ///   - inputArtifactDetails: The details of the input artifact for the action, such as its commit ID.
    ///   - outputArtifactDetails: The details of the output artifact of the action, such as its commit ID.
    ///   - provider: The provider of the service used in the custom action, such as CodeDeploy.
    ///   - settings: URLs that provide users information about this custom action.
    ///   - tags: The tags for the custom action.
    ///   - version: The version identifier of the custom action.
    ///   - logger: Logger use during operation
    @inlinable
    public func createCustomActionType(
        category: ActionCategory,
        configurationProperties: [ActionConfigurationProperty]? = nil,
        inputArtifactDetails: ArtifactDetails,
        outputArtifactDetails: ArtifactDetails,
        provider: String,
        settings: ActionTypeSettings? = nil,
        tags: [Tag]? = nil,
        version: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateCustomActionTypeOutput {
        let input = CreateCustomActionTypeInput(
            category: category, 
            configurationProperties: configurationProperties, 
            inputArtifactDetails: inputArtifactDetails, 
            outputArtifactDetails: outputArtifactDetails, 
            provider: provider, 
            settings: settings, 
            tags: tags, 
            version: version
        )
        return try await self.createCustomActionType(input, logger: logger)
    }

    /// Creates a pipeline.  In the pipeline structure, you must include either artifactStore or artifactStores in your pipeline, but you cannot use both. If you create a cross-region action in your pipeline, you must use artifactStores.
    @Sendable
    @inlinable
    public func createPipeline(_ input: CreatePipelineInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreatePipelineOutput {
        try await self.client.execute(
            operation: "CreatePipeline", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a pipeline.  In the pipeline structure, you must include either artifactStore or artifactStores in your pipeline, but you cannot use both. If you create a cross-region action in your pipeline, you must use artifactStores.
    ///
    /// Parameters:
    ///   - pipeline: Represents the structure of actions and stages to be performed in the pipeline.
    ///   - tags: The tags for the pipeline.
    ///   - logger: Logger use during operation
    @inlinable
    public func createPipeline(
        pipeline: PipelineDeclaration,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreatePipelineOutput {
        let input = CreatePipelineInput(
            pipeline: pipeline, 
            tags: tags
        )
        return try await self.createPipeline(input, logger: logger)
    }

    /// Marks a custom action as deleted. PollForJobs for the custom action fails after the action is marked for deletion. Used for custom actions only.  To re-create a custom action after it has been deleted you must use a string in the version field that has never been used before. This string can be an incremented version number, for example. To restore a deleted custom action, use a JSON file that is identical to the deleted action, including the original string in the version field.
    @Sendable
    @inlinable
    public func deleteCustomActionType(_ input: DeleteCustomActionTypeInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteCustomActionType", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Marks a custom action as deleted. PollForJobs for the custom action fails after the action is marked for deletion. Used for custom actions only.  To re-create a custom action after it has been deleted you must use a string in the version field that has never been used before. This string can be an incremented version number, for example. To restore a deleted custom action, use a JSON file that is identical to the deleted action, including the original string in the version field.
    ///
    /// Parameters:
    ///   - category: The category of the custom action that you want to delete, such as source or deploy.
    ///   - provider: The provider of the service used in the custom action, such as CodeDeploy.
    ///   - version: The version of the custom action to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteCustomActionType(
        category: ActionCategory,
        provider: String,
        version: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteCustomActionTypeInput(
            category: category, 
            provider: provider, 
            version: version
        )
        return try await self.deleteCustomActionType(input, logger: logger)
    }

    /// Deletes the specified pipeline.
    @Sendable
    @inlinable
    public func deletePipeline(_ input: DeletePipelineInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeletePipeline", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified pipeline.
    ///
    /// Parameters:
    ///   - name: The name of the pipeline to be deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func deletePipeline(
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeletePipelineInput(
            name: name
        )
        return try await self.deletePipeline(input, logger: logger)
    }

    /// Deletes a previously created webhook by name. Deleting the webhook stops CodePipeline from starting a pipeline every time an external event occurs. The API returns successfully when trying to delete a webhook that is already deleted. If a deleted webhook is re-created by calling PutWebhook with the same name, it will have a different URL.
    @Sendable
    @inlinable
    public func deleteWebhook(_ input: DeleteWebhookInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteWebhookOutput {
        try await self.client.execute(
            operation: "DeleteWebhook", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a previously created webhook by name. Deleting the webhook stops CodePipeline from starting a pipeline every time an external event occurs. The API returns successfully when trying to delete a webhook that is already deleted. If a deleted webhook is re-created by calling PutWebhook with the same name, it will have a different URL.
    ///
    /// Parameters:
    ///   - name: The name of the webhook you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteWebhook(
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteWebhookOutput {
        let input = DeleteWebhookInput(
            name: name
        )
        return try await self.deleteWebhook(input, logger: logger)
    }

    /// Removes the connection between the webhook that was created by CodePipeline and the external tool with events to be detected. Currently supported only for webhooks that target an action type of GitHub.
    @Sendable
    @inlinable
    public func deregisterWebhookWithThirdParty(_ input: DeregisterWebhookWithThirdPartyInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DeregisterWebhookWithThirdPartyOutput {
        try await self.client.execute(
            operation: "DeregisterWebhookWithThirdParty", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes the connection between the webhook that was created by CodePipeline and the external tool with events to be detected. Currently supported only for webhooks that target an action type of GitHub.
    ///
    /// Parameters:
    ///   - webhookName: The name of the webhook you want to deregister.
    ///   - logger: Logger use during operation
    @inlinable
    public func deregisterWebhookWithThirdParty(
        webhookName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeregisterWebhookWithThirdPartyOutput {
        let input = DeregisterWebhookWithThirdPartyInput(
            webhookName: webhookName
        )
        return try await self.deregisterWebhookWithThirdParty(input, logger: logger)
    }

    /// Prevents artifacts in a pipeline from transitioning to the next stage in the pipeline.
    @Sendable
    @inlinable
    public func disableStageTransition(_ input: DisableStageTransitionInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DisableStageTransition", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Prevents artifacts in a pipeline from transitioning to the next stage in the pipeline.
    ///
    /// Parameters:
    ///   - pipelineName: The name of the pipeline in which you want to disable the flow of artifacts from one stage to another.
    ///   - reason: The reason given to the user that a stage is disabled, such as waiting for manual approval or manual tests. This message is displayed in the pipeline console UI.
    ///   - stageName: The name of the stage where you want to disable the inbound or outbound transition of artifacts.
    ///   - transitionType: Specifies whether artifacts are prevented from transitioning into the stage and being processed by the actions in that stage (inbound), or prevented from transitioning from the stage after they have been processed by the actions in that stage (outbound).
    ///   - logger: Logger use during operation
    @inlinable
    public func disableStageTransition(
        pipelineName: String,
        reason: String,
        stageName: String,
        transitionType: StageTransitionType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DisableStageTransitionInput(
            pipelineName: pipelineName, 
            reason: reason, 
            stageName: stageName, 
            transitionType: transitionType
        )
        return try await self.disableStageTransition(input, logger: logger)
    }

    /// Enables artifacts in a pipeline to transition to a stage in a pipeline.
    @Sendable
    @inlinable
    public func enableStageTransition(_ input: EnableStageTransitionInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "EnableStageTransition", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enables artifacts in a pipeline to transition to a stage in a pipeline.
    ///
    /// Parameters:
    ///   - pipelineName: The name of the pipeline in which you want to enable the flow of artifacts from one stage to another.
    ///   - stageName: The name of the stage where you want to enable the transition of artifacts, either into the stage (inbound) or from that stage to the next stage (outbound).
    ///   - transitionType: Specifies whether artifacts are allowed to enter the stage and be processed by the actions in that stage (inbound) or whether already processed artifacts are allowed to transition to the next stage (outbound).
    ///   - logger: Logger use during operation
    @inlinable
    public func enableStageTransition(
        pipelineName: String,
        stageName: String,
        transitionType: StageTransitionType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = EnableStageTransitionInput(
            pipelineName: pipelineName, 
            stageName: stageName, 
            transitionType: transitionType
        )
        return try await self.enableStageTransition(input, logger: logger)
    }

    /// Returns information about an action type created for an external provider, where the action is to be used by customers of the external provider. The action can be created with any supported integration model.
    @Sendable
    @inlinable
    public func getActionType(_ input: GetActionTypeInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetActionTypeOutput {
        try await self.client.execute(
            operation: "GetActionType", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about an action type created for an external provider, where the action is to be used by customers of the external provider. The action can be created with any supported integration model.
    ///
    /// Parameters:
    ///   - category: Defines what kind of action can be taken in the stage. The following are the valid values:    Source     Build     Test     Deploy     Approval     Invoke     Compute
    ///   - owner: The creator of an action type that was created with any supported integration model. There are two valid values: AWS and ThirdParty.
    ///   - provider: The provider of the action type being called. The provider name is specified when the action type is created.
    ///   - version: A string that describes the action type version.
    ///   - logger: Logger use during operation
    @inlinable
    public func getActionType(
        category: ActionCategory,
        owner: String,
        provider: String,
        version: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetActionTypeOutput {
        let input = GetActionTypeInput(
            category: category, 
            owner: owner, 
            provider: provider, 
            version: version
        )
        return try await self.getActionType(input, logger: logger)
    }

    /// Returns information about a job. Used for custom actions only.  When this API is called, CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts. This API also returns any secret values defined for the action.
    @Sendable
    @inlinable
    public func getJobDetails(_ input: GetJobDetailsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetJobDetailsOutput {
        try await self.client.execute(
            operation: "GetJobDetails", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a job. Used for custom actions only.  When this API is called, CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts. This API also returns any secret values defined for the action.
    ///
    /// Parameters:
    ///   - jobId: The unique system-generated ID for the job.
    ///   - logger: Logger use during operation
    @inlinable
    public func getJobDetails(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetJobDetailsOutput {
        let input = GetJobDetailsInput(
            jobId: jobId
        )
        return try await self.getJobDetails(input, logger: logger)
    }

    /// Returns the metadata, structure, stages, and actions of a pipeline. Can be used to return the entire structure of a pipeline in JSON format, which can then be modified and used to update the pipeline structure with UpdatePipeline.
    @Sendable
    @inlinable
    public func getPipeline(_ input: GetPipelineInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetPipelineOutput {
        try await self.client.execute(
            operation: "GetPipeline", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the metadata, structure, stages, and actions of a pipeline. Can be used to return the entire structure of a pipeline in JSON format, which can then be modified and used to update the pipeline structure with UpdatePipeline.
    ///
    /// Parameters:
    ///   - name: The name of the pipeline for which you want to get information. Pipeline names must be unique in an Amazon Web Services account.
    ///   - version: The version number of the pipeline. If you do not specify a version, defaults to the current version.
    ///   - logger: Logger use during operation
    @inlinable
    public func getPipeline(
        name: String,
        version: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetPipelineOutput {
        let input = GetPipelineInput(
            name: name, 
            version: version
        )
        return try await self.getPipeline(input, logger: logger)
    }

    /// Returns information about an execution of a pipeline, including details about artifacts, the pipeline execution ID, and the name, version, and status of the pipeline.
    @Sendable
    @inlinable
    public func getPipelineExecution(_ input: GetPipelineExecutionInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetPipelineExecutionOutput {
        try await self.client.execute(
            operation: "GetPipelineExecution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about an execution of a pipeline, including details about artifacts, the pipeline execution ID, and the name, version, and status of the pipeline.
    ///
    /// Parameters:
    ///   - pipelineExecutionId: The ID of the pipeline execution about which you want to get execution details.
    ///   - pipelineName: The name of the pipeline about which you want to get execution details.
    ///   - logger: Logger use during operation
    @inlinable
    public func getPipelineExecution(
        pipelineExecutionId: String,
        pipelineName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetPipelineExecutionOutput {
        let input = GetPipelineExecutionInput(
            pipelineExecutionId: pipelineExecutionId, 
            pipelineName: pipelineName
        )
        return try await self.getPipelineExecution(input, logger: logger)
    }

    /// Returns information about the state of a pipeline, including the stages and actions.  Values returned in the revisionId and revisionUrl fields indicate the source revision information, such as the commit ID, for the current state.
    @Sendable
    @inlinable
    public func getPipelineState(_ input: GetPipelineStateInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetPipelineStateOutput {
        try await self.client.execute(
            operation: "GetPipelineState", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the state of a pipeline, including the stages and actions.  Values returned in the revisionId and revisionUrl fields indicate the source revision information, such as the commit ID, for the current state.
    ///
    /// Parameters:
    ///   - name: The name of the pipeline about which you want to get information.
    ///   - logger: Logger use during operation
    @inlinable
    public func getPipelineState(
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetPipelineStateOutput {
        let input = GetPipelineStateInput(
            name: name
        )
        return try await self.getPipelineState(input, logger: logger)
    }

    /// Requests the details of a job for a third party action. Used for partner actions only.  When this API is called, CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts. This API also returns any secret values defined for the action.
    @Sendable
    @inlinable
    public func getThirdPartyJobDetails(_ input: GetThirdPartyJobDetailsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetThirdPartyJobDetailsOutput {
        try await self.client.execute(
            operation: "GetThirdPartyJobDetails", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Requests the details of a job for a third party action. Used for partner actions only.  When this API is called, CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts. This API also returns any secret values defined for the action.
    ///
    /// Parameters:
    ///   - clientToken: The clientToken portion of the clientId and clientToken pair used to verify that the calling entity is allowed access to the job and its details.
    ///   - jobId: The unique system-generated ID used for identifying the job.
    ///   - logger: Logger use during operation
    @inlinable
    public func getThirdPartyJobDetails(
        clientToken: String,
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetThirdPartyJobDetailsOutput {
        let input = GetThirdPartyJobDetailsInput(
            clientToken: clientToken, 
            jobId: jobId
        )
        return try await self.getThirdPartyJobDetails(input, logger: logger)
    }

    /// Lists the action executions that have occurred in a pipeline.
    @Sendable
    @inlinable
    public func listActionExecutions(_ input: ListActionExecutionsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListActionExecutionsOutput {
        try await self.client.execute(
            operation: "ListActionExecutions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the action executions that have occurred in a pipeline.
    ///
    /// Parameters:
    ///   - filter: Input information used to filter action execution history.
    ///   - maxResults: The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value. Action execution history is retained for up to 12 months, based on action execution start times. Default value is 100.
    ///   - nextToken: The token that was returned from the previous ListActionExecutions call, which can be used to return the next set of action executions in the list.
    ///   - pipelineName:  The name of the pipeline for which you want to list action execution history.
    ///   - logger: Logger use during operation
    @inlinable
    public func listActionExecutions(
        filter: ActionExecutionFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        pipelineName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListActionExecutionsOutput {
        let input = ListActionExecutionsInput(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            pipelineName: pipelineName
        )
        return try await self.listActionExecutions(input, logger: logger)
    }

    /// Gets a summary of all CodePipeline action types associated with your account.
    @Sendable
    @inlinable
    public func listActionTypes(_ input: ListActionTypesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListActionTypesOutput {
        try await self.client.execute(
            operation: "ListActionTypes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a summary of all CodePipeline action types associated with your account.
    ///
    /// Parameters:
    ///   - actionOwnerFilter: Filters the list of action types to those created by a specified entity.
    ///   - nextToken: An identifier that was returned from the previous list action types call, which can be used to return the next set of action types in the list.
    ///   - regionFilter: The Region to filter on for the list of action types.
    ///   - logger: Logger use during operation
    @inlinable
    public func listActionTypes(
        actionOwnerFilter: ActionOwner? = nil,
        nextToken: String? = nil,
        regionFilter: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListActionTypesOutput {
        let input = ListActionTypesInput(
            actionOwnerFilter: actionOwnerFilter, 
            nextToken: nextToken, 
            regionFilter: regionFilter
        )
        return try await self.listActionTypes(input, logger: logger)
    }

    /// Lists the targets for the deploy action.
    @Sendable
    @inlinable
    public func listDeployActionExecutionTargets(_ input: ListDeployActionExecutionTargetsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDeployActionExecutionTargetsOutput {
        try await self.client.execute(
            operation: "ListDeployActionExecutionTargets", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the targets for the deploy action.
    ///
    /// Parameters:
    ///   - actionExecutionId: The execution ID for the deploy action.
    ///   - filters: Filters the targets for a specified deploy action.
    ///   - maxResults: The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value.
    ///   - nextToken: An identifier that was returned from the previous list action types call, which can be used to return the next set of action types in the list.
    ///   - pipelineName: The name of the pipeline with the deploy action.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDeployActionExecutionTargets(
        actionExecutionId: String,
        filters: [TargetFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        pipelineName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDeployActionExecutionTargetsOutput {
        let input = ListDeployActionExecutionTargetsInput(
            actionExecutionId: actionExecutionId, 
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            pipelineName: pipelineName
        )
        return try await self.listDeployActionExecutionTargets(input, logger: logger)
    }

    /// Gets a summary of the most recent executions for a pipeline.  When applying the filter for pipeline executions that have succeeded in the stage, the operation returns all executions in the current pipeline version beginning on February 1, 2024.
    @Sendable
    @inlinable
    public func listPipelineExecutions(_ input: ListPipelineExecutionsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListPipelineExecutionsOutput {
        try await self.client.execute(
            operation: "ListPipelineExecutions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a summary of the most recent executions for a pipeline.  When applying the filter for pipeline executions that have succeeded in the stage, the operation returns all executions in the current pipeline version beginning on February 1, 2024.
    ///
    /// Parameters:
    ///   - filter: The pipeline execution to filter on.
    ///   - maxResults: The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value. Pipeline history is limited to the most recent 12 months, based on pipeline execution start times. Default value is 100.
    ///   - nextToken: The token that was returned from the previous ListPipelineExecutions call, which can be used to return the next set of pipeline executions in the list.
    ///   - pipelineName: The name of the pipeline for which you want to get execution summary information.
    ///   - logger: Logger use during operation
    @inlinable
    public func listPipelineExecutions(
        filter: PipelineExecutionFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        pipelineName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListPipelineExecutionsOutput {
        let input = ListPipelineExecutionsInput(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            pipelineName: pipelineName
        )
        return try await self.listPipelineExecutions(input, logger: logger)
    }

    /// Gets a summary of all of the pipelines associated with your account.
    @Sendable
    @inlinable
    public func listPipelines(_ input: ListPipelinesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListPipelinesOutput {
        try await self.client.execute(
            operation: "ListPipelines", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a summary of all of the pipelines associated with your account.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of pipelines to return in a single call. To retrieve the remaining pipelines, make another call with the returned nextToken value. The minimum value you can specify is 1. The maximum accepted value is 1000.
    ///   - nextToken: An identifier that was returned from the previous list pipelines call. It can be used to return the next set of pipelines in the list.
    ///   - logger: Logger use during operation
    @inlinable
    public func listPipelines(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListPipelinesOutput {
        let input = ListPipelinesInput(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listPipelines(input, logger: logger)
    }

    /// Lists the rule executions that have occurred in a pipeline configured for conditions with rules.
    @Sendable
    @inlinable
    public func listRuleExecutions(_ input: ListRuleExecutionsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRuleExecutionsOutput {
        try await self.client.execute(
            operation: "ListRuleExecutions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the rule executions that have occurred in a pipeline configured for conditions with rules.
    ///
    /// Parameters:
    ///   - filter: Input information used to filter rule execution history.
    ///   - maxResults: The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value. Pipeline history is limited to the most recent 12 months, based on pipeline execution start times. Default value is 100.
    ///   - nextToken: The token that was returned from the previous ListRuleExecutions call, which can be used to return the next set of rule executions in the list.
    ///   - pipelineName: The name of the pipeline for which you want to get execution summary information.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRuleExecutions(
        filter: RuleExecutionFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        pipelineName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRuleExecutionsOutput {
        let input = ListRuleExecutionsInput(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            pipelineName: pipelineName
        )
        return try await self.listRuleExecutions(input, logger: logger)
    }

    /// Lists the rules for the condition. For more information about conditions, see Stage conditions and How do stage conditions work?.For more information about rules, see the CodePipeline rule reference.
    @Sendable
    @inlinable
    public func listRuleTypes(_ input: ListRuleTypesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRuleTypesOutput {
        try await self.client.execute(
            operation: "ListRuleTypes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the rules for the condition. For more information about conditions, see Stage conditions and How do stage conditions work?.For more information about rules, see the CodePipeline rule reference.
    ///
    /// Parameters:
    ///   - regionFilter: The rule Region to filter on.
    ///   - ruleOwnerFilter: The rule owner to filter on.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRuleTypes(
        regionFilter: String? = nil,
        ruleOwnerFilter: RuleOwner? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRuleTypesOutput {
        let input = ListRuleTypesInput(
            regionFilter: regionFilter, 
            ruleOwnerFilter: ruleOwnerFilter
        )
        return try await self.listRuleTypes(input, logger: logger)
    }

    /// Gets the set of key-value pairs (metadata) that are used to manage the resource.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceOutput {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the set of key-value pairs (metadata) that are used to manage the resource.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return in a single call.
    ///   - nextToken: The token that was returned from the previous API call, which would be used to return the next page of the list. The ListTagsforResource call lists all available tags in one call and does not use pagination.
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource to get tags for.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceOutput {
        let input = ListTagsForResourceInput(
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Gets a listing of all the webhooks in this Amazon Web Services Region for this account. The output lists all webhooks and includes the webhook URL and ARN and the configuration for each webhook.  If a secret token was provided, it will be redacted in the response.
    @Sendable
    @inlinable
    public func listWebhooks(_ input: ListWebhooksInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListWebhooksOutput {
        try await self.client.execute(
            operation: "ListWebhooks", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a listing of all the webhooks in this Amazon Web Services Region for this account. The output lists all webhooks and includes the webhook URL and ARN and the configuration for each webhook.  If a secret token was provided, it will be redacted in the response.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value.
    ///   - nextToken: The token that was returned from the previous ListWebhooks call, which can be used to return the next set of webhooks in the list.
    ///   - logger: Logger use during operation
    @inlinable
    public func listWebhooks(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListWebhooksOutput {
        let input = ListWebhooksInput(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listWebhooks(input, logger: logger)
    }

    /// Used to override a stage condition. For more information about conditions, see Stage conditions and How do stage conditions work?.
    @Sendable
    @inlinable
    public func overrideStageCondition(_ input: OverrideStageConditionInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "OverrideStageCondition", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Used to override a stage condition. For more information about conditions, see Stage conditions and How do stage conditions work?.
    ///
    /// Parameters:
    ///   - conditionType: The type of condition to override for the stage, such as entry conditions, failure conditions, or success conditions.
    ///   - pipelineExecutionId: The ID of the pipeline execution for the override.
    ///   - pipelineName: The name of the pipeline with the stage that will override the condition.
    ///   - stageName: The name of the stage for the override.
    ///   - logger: Logger use during operation
    @inlinable
    public func overrideStageCondition(
        conditionType: ConditionType,
        pipelineExecutionId: String,
        pipelineName: String,
        stageName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = OverrideStageConditionInput(
            conditionType: conditionType, 
            pipelineExecutionId: pipelineExecutionId, 
            pipelineName: pipelineName, 
            stageName: stageName
        )
        return try await self.overrideStageCondition(input, logger: logger)
    }

    /// Returns information about any jobs for CodePipeline to act on. PollForJobs is valid only for action types with "Custom" in the owner field. If the action type contains AWS or ThirdParty in the owner field, the PollForJobs action returns an error.  When this API is called, CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts. This API also returns any secret values defined for the action.
    @Sendable
    @inlinable
    public func pollForJobs(_ input: PollForJobsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> PollForJobsOutput {
        try await self.client.execute(
            operation: "PollForJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about any jobs for CodePipeline to act on. PollForJobs is valid only for action types with "Custom" in the owner field. If the action type contains AWS or ThirdParty in the owner field, the PollForJobs action returns an error.  When this API is called, CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts. This API also returns any secret values defined for the action.
    ///
    /// Parameters:
    ///   - actionTypeId: Represents information about an action type.
    ///   - maxBatchSize: The maximum number of jobs to return in a poll for jobs call.
    ///   - queryParam: A map of property names and values. For an action type with no queryable properties, this value must be null or an empty map. For an action type with a queryable property, you must supply that property as a key in the map. Only jobs whose action configuration matches the mapped value are returned.
    ///   - logger: Logger use during operation
    @inlinable
    public func pollForJobs(
        actionTypeId: ActionTypeId,
        maxBatchSize: Int? = nil,
        queryParam: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PollForJobsOutput {
        let input = PollForJobsInput(
            actionTypeId: actionTypeId, 
            maxBatchSize: maxBatchSize, 
            queryParam: queryParam
        )
        return try await self.pollForJobs(input, logger: logger)
    }

    /// Determines whether there are any third party jobs for a job worker to act on. Used for partner actions only.  When this API is called, CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts.
    @Sendable
    @inlinable
    public func pollForThirdPartyJobs(_ input: PollForThirdPartyJobsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> PollForThirdPartyJobsOutput {
        try await self.client.execute(
            operation: "PollForThirdPartyJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Determines whether there are any third party jobs for a job worker to act on. Used for partner actions only.  When this API is called, CodePipeline returns temporary credentials for the S3 bucket used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts.
    ///
    /// Parameters:
    ///   - actionTypeId: Represents information about an action type.
    ///   - maxBatchSize: The maximum number of jobs to return in a poll for jobs call.
    ///   - logger: Logger use during operation
    @inlinable
    public func pollForThirdPartyJobs(
        actionTypeId: ActionTypeId,
        maxBatchSize: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PollForThirdPartyJobsOutput {
        let input = PollForThirdPartyJobsInput(
            actionTypeId: actionTypeId, 
            maxBatchSize: maxBatchSize
        )
        return try await self.pollForThirdPartyJobs(input, logger: logger)
    }

    /// Provides information to CodePipeline about new revisions to a source.
    @Sendable
    @inlinable
    public func putActionRevision(_ input: PutActionRevisionInput, logger: Logger = AWSClient.loggingDisabled) async throws -> PutActionRevisionOutput {
        try await self.client.execute(
            operation: "PutActionRevision", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides information to CodePipeline about new revisions to a source.
    ///
    /// Parameters:
    ///   - actionName: The name of the action that processes the revision.
    ///   - actionRevision: Represents information about the version (or revision) of an action.
    ///   - pipelineName: The name of the pipeline that starts processing the revision to the source.
    ///   - stageName: The name of the stage that contains the action that acts on the revision.
    ///   - logger: Logger use during operation
    @inlinable
    public func putActionRevision(
        actionName: String,
        actionRevision: ActionRevision,
        pipelineName: String,
        stageName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutActionRevisionOutput {
        let input = PutActionRevisionInput(
            actionName: actionName, 
            actionRevision: actionRevision, 
            pipelineName: pipelineName, 
            stageName: stageName
        )
        return try await self.putActionRevision(input, logger: logger)
    }

    /// Provides the response to a manual approval request to CodePipeline. Valid responses include Approved and Rejected.
    @Sendable
    @inlinable
    public func putApprovalResult(_ input: PutApprovalResultInput, logger: Logger = AWSClient.loggingDisabled) async throws -> PutApprovalResultOutput {
        try await self.client.execute(
            operation: "PutApprovalResult", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides the response to a manual approval request to CodePipeline. Valid responses include Approved and Rejected.
    ///
    /// Parameters:
    ///   - actionName: The name of the action for which approval is requested.
    ///   - pipelineName: The name of the pipeline that contains the action.
    ///   - result: Represents information about the result of the approval request.
    ///   - stageName: The name of the stage that contains the action.
    ///   - token: The system-generated token used to identify a unique approval request. The token for each open approval request can be obtained using the GetPipelineState action. It is used to validate that the approval request corresponding to this token is still valid.  For a pipeline where the execution mode is set to PARALLEL, the token required to approve/reject an approval request as detailed above is not available. Instead, use the externalExecutionId in the response output from the ListActionExecutions action as the token in the approval request.
    ///   - logger: Logger use during operation
    @inlinable
    public func putApprovalResult(
        actionName: String,
        pipelineName: String,
        result: ApprovalResult,
        stageName: String,
        token: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutApprovalResultOutput {
        let input = PutApprovalResultInput(
            actionName: actionName, 
            pipelineName: pipelineName, 
            result: result, 
            stageName: stageName, 
            token: token
        )
        return try await self.putApprovalResult(input, logger: logger)
    }

    /// Represents the failure of a job as returned to the pipeline by a job worker. Used for custom actions only.
    @Sendable
    @inlinable
    public func putJobFailureResult(_ input: PutJobFailureResultInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "PutJobFailureResult", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Represents the failure of a job as returned to the pipeline by a job worker. Used for custom actions only.
    ///
    /// Parameters:
    ///   - failureDetails: The details about the failure of a job.
    ///   - jobId: The unique system-generated ID of the job that failed. This is the same ID returned from PollForJobs.
    ///   - logger: Logger use during operation
    @inlinable
    public func putJobFailureResult(
        failureDetails: FailureDetails,
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = PutJobFailureResultInput(
            failureDetails: failureDetails, 
            jobId: jobId
        )
        return try await self.putJobFailureResult(input, logger: logger)
    }

    /// Represents the success of a job as returned to the pipeline by a job worker. Used for custom actions only.
    @Sendable
    @inlinable
    public func putJobSuccessResult(_ input: PutJobSuccessResultInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "PutJobSuccessResult", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Represents the success of a job as returned to the pipeline by a job worker. Used for custom actions only.
    ///
    /// Parameters:
    ///   - continuationToken: A token generated by a job worker, such as a CodeDeploy deployment ID, that a successful job provides to identify a custom action in progress. Future jobs use this token to identify the running instance of the action. It can be reused to return more information about the progress of the custom action. When the action is complete, no continuation token should be supplied.
    ///   - currentRevision: The ID of the current revision of the artifact successfully worked on by the job.
    ///   - executionDetails: The execution details of the successful job, such as the actions taken by the job worker.
    ///   - jobId: The unique system-generated ID of the job that succeeded. This is the same ID returned from PollForJobs.
    ///   - outputVariables: Key-value pairs produced as output by a job worker that can be made available to a downstream action configuration. outputVariables can be included only when there is no continuation token on the request.
    ///   - logger: Logger use during operation
    @inlinable
    public func putJobSuccessResult(
        continuationToken: String? = nil,
        currentRevision: CurrentRevision? = nil,
        executionDetails: ExecutionDetails? = nil,
        jobId: String,
        outputVariables: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = PutJobSuccessResultInput(
            continuationToken: continuationToken, 
            currentRevision: currentRevision, 
            executionDetails: executionDetails, 
            jobId: jobId, 
            outputVariables: outputVariables
        )
        return try await self.putJobSuccessResult(input, logger: logger)
    }

    /// Represents the failure of a third party job as returned to the pipeline by a job worker. Used for partner actions only.
    @Sendable
    @inlinable
    public func putThirdPartyJobFailureResult(_ input: PutThirdPartyJobFailureResultInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "PutThirdPartyJobFailureResult", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Represents the failure of a third party job as returned to the pipeline by a job worker. Used for partner actions only.
    ///
    /// Parameters:
    ///   - clientToken: The clientToken portion of the clientId and clientToken pair used to verify that the calling entity is allowed access to the job and its details.
    ///   - failureDetails: Represents information about failure details.
    ///   - jobId: The ID of the job that failed. This is the same ID returned from PollForThirdPartyJobs.
    ///   - logger: Logger use during operation
    @inlinable
    public func putThirdPartyJobFailureResult(
        clientToken: String,
        failureDetails: FailureDetails,
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = PutThirdPartyJobFailureResultInput(
            clientToken: clientToken, 
            failureDetails: failureDetails, 
            jobId: jobId
        )
        return try await self.putThirdPartyJobFailureResult(input, logger: logger)
    }

    /// Represents the success of a third party job as returned to the pipeline by a job worker. Used for partner actions only.
    @Sendable
    @inlinable
    public func putThirdPartyJobSuccessResult(_ input: PutThirdPartyJobSuccessResultInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "PutThirdPartyJobSuccessResult", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Represents the success of a third party job as returned to the pipeline by a job worker. Used for partner actions only.
    ///
    /// Parameters:
    ///   - clientToken: The clientToken portion of the clientId and clientToken pair used to verify that the calling entity is allowed access to the job and its details.
    ///   - continuationToken: A token generated by a job worker, such as a CodeDeploy deployment ID, that a successful job provides to identify a partner action in progress. Future jobs use this token to identify the running instance of the action. It can be reused to return more information about the progress of the partner action. When the action is complete, no continuation token should be supplied.
    ///   - currentRevision: Represents information about a current revision.
    ///   - executionDetails: The details of the actions taken and results produced on an artifact as it passes through stages in the pipeline.
    ///   - jobId: The ID of the job that successfully completed. This is the same ID returned from PollForThirdPartyJobs.
    ///   - logger: Logger use during operation
    @inlinable
    public func putThirdPartyJobSuccessResult(
        clientToken: String,
        continuationToken: String? = nil,
        currentRevision: CurrentRevision? = nil,
        executionDetails: ExecutionDetails? = nil,
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = PutThirdPartyJobSuccessResultInput(
            clientToken: clientToken, 
            continuationToken: continuationToken, 
            currentRevision: currentRevision, 
            executionDetails: executionDetails, 
            jobId: jobId
        )
        return try await self.putThirdPartyJobSuccessResult(input, logger: logger)
    }

    /// Defines a webhook and returns a unique webhook URL generated by CodePipeline. This URL can be supplied to third party source hosting providers to call every time there's a code change. When CodePipeline receives a POST request on this URL, the pipeline defined in the webhook is started as long as the POST request satisfied the authentication and filtering requirements supplied when defining the webhook. RegisterWebhookWithThirdParty and DeregisterWebhookWithThirdParty APIs can be used to automatically configure supported third parties to call the generated webhook URL.  When creating CodePipeline webhooks, do not use your own credentials or reuse the same secret token across multiple webhooks. For optimal security, generate a unique secret token for each webhook you create. The secret token is an arbitrary string that you provide, which GitHub uses to compute and sign the webhook payloads sent to CodePipeline, for protecting the integrity and authenticity of the webhook payloads. Using your own credentials or reusing the same token across multiple webhooks can lead to security vulnerabilities.   If a secret token was provided, it will be redacted in the response.
    @Sendable
    @inlinable
    public func putWebhook(_ input: PutWebhookInput, logger: Logger = AWSClient.loggingDisabled) async throws -> PutWebhookOutput {
        try await self.client.execute(
            operation: "PutWebhook", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Defines a webhook and returns a unique webhook URL generated by CodePipeline. This URL can be supplied to third party source hosting providers to call every time there's a code change. When CodePipeline receives a POST request on this URL, the pipeline defined in the webhook is started as long as the POST request satisfied the authentication and filtering requirements supplied when defining the webhook. RegisterWebhookWithThirdParty and DeregisterWebhookWithThirdParty APIs can be used to automatically configure supported third parties to call the generated webhook URL.  When creating CodePipeline webhooks, do not use your own credentials or reuse the same secret token across multiple webhooks. For optimal security, generate a unique secret token for each webhook you create. The secret token is an arbitrary string that you provide, which GitHub uses to compute and sign the webhook payloads sent to CodePipeline, for protecting the integrity and authenticity of the webhook payloads. Using your own credentials or reusing the same token across multiple webhooks can lead to security vulnerabilities.   If a secret token was provided, it will be redacted in the response.
    ///
    /// Parameters:
    ///   - tags: The tags for the webhook.
    ///   - webhook: The detail provided in an input file to create the webhook, such as the webhook name, the pipeline name, and the action name. Give the webhook a unique name that helps you identify it. You might name the webhook after the pipeline and action it targets so that you can easily recognize what it's used for later.
    ///   - logger: Logger use during operation
    @inlinable
    public func putWebhook(
        tags: [Tag]? = nil,
        webhook: WebhookDefinition,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutWebhookOutput {
        let input = PutWebhookInput(
            tags: tags, 
            webhook: webhook
        )
        return try await self.putWebhook(input, logger: logger)
    }

    /// Configures a connection between the webhook that was created and the external tool with events to be detected.
    @Sendable
    @inlinable
    public func registerWebhookWithThirdParty(_ input: RegisterWebhookWithThirdPartyInput, logger: Logger = AWSClient.loggingDisabled) async throws -> RegisterWebhookWithThirdPartyOutput {
        try await self.client.execute(
            operation: "RegisterWebhookWithThirdParty", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Configures a connection between the webhook that was created and the external tool with events to be detected.
    ///
    /// Parameters:
    ///   - webhookName: The name of an existing webhook created with PutWebhook to register with a supported third party.
    ///   - logger: Logger use during operation
    @inlinable
    public func registerWebhookWithThirdParty(
        webhookName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RegisterWebhookWithThirdPartyOutput {
        let input = RegisterWebhookWithThirdPartyInput(
            webhookName: webhookName
        )
        return try await self.registerWebhookWithThirdParty(input, logger: logger)
    }

    /// You can retry a stage that has failed without having to run a pipeline again from the beginning. You do this by either retrying the failed actions in a stage or by retrying all actions in the stage starting from the first action in the stage. When you retry the failed actions in a stage, all actions that are still in progress continue working, and failed actions are triggered again. When you retry a failed stage from the first action in the stage, the stage cannot have any actions in progress. Before a stage can be retried, it must either have all actions failed or some actions failed and some succeeded.
    @Sendable
    @inlinable
    public func retryStageExecution(_ input: RetryStageExecutionInput, logger: Logger = AWSClient.loggingDisabled) async throws -> RetryStageExecutionOutput {
        try await self.client.execute(
            operation: "RetryStageExecution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// You can retry a stage that has failed without having to run a pipeline again from the beginning. You do this by either retrying the failed actions in a stage or by retrying all actions in the stage starting from the first action in the stage. When you retry the failed actions in a stage, all actions that are still in progress continue working, and failed actions are triggered again. When you retry a failed stage from the first action in the stage, the stage cannot have any actions in progress. Before a stage can be retried, it must either have all actions failed or some actions failed and some succeeded.
    ///
    /// Parameters:
    ///   - pipelineExecutionId: The ID of the pipeline execution in the failed stage to be retried. Use the GetPipelineState action to retrieve the current pipelineExecutionId of the failed stage
    ///   - pipelineName: The name of the pipeline that contains the failed stage.
    ///   - retryMode: The scope of the retry attempt.
    ///   - stageName: The name of the failed stage to be retried.
    ///   - logger: Logger use during operation
    @inlinable
    public func retryStageExecution(
        pipelineExecutionId: String,
        pipelineName: String,
        retryMode: StageRetryMode,
        stageName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RetryStageExecutionOutput {
        let input = RetryStageExecutionInput(
            pipelineExecutionId: pipelineExecutionId, 
            pipelineName: pipelineName, 
            retryMode: retryMode, 
            stageName: stageName
        )
        return try await self.retryStageExecution(input, logger: logger)
    }

    /// Rolls back a stage execution.
    @Sendable
    @inlinable
    public func rollbackStage(_ input: RollbackStageInput, logger: Logger = AWSClient.loggingDisabled) async throws -> RollbackStageOutput {
        try await self.client.execute(
            operation: "RollbackStage", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Rolls back a stage execution.
    ///
    /// Parameters:
    ///   - pipelineName: The name of the pipeline for which the stage will be rolled back.
    ///   - stageName: The name of the stage in the pipeline to be rolled back.
    ///   - targetPipelineExecutionId: The pipeline execution ID for the stage to be rolled back to.
    ///   - logger: Logger use during operation
    @inlinable
    public func rollbackStage(
        pipelineName: String,
        stageName: String,
        targetPipelineExecutionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RollbackStageOutput {
        let input = RollbackStageInput(
            pipelineName: pipelineName, 
            stageName: stageName, 
            targetPipelineExecutionId: targetPipelineExecutionId
        )
        return try await self.rollbackStage(input, logger: logger)
    }

    /// Starts the specified pipeline. Specifically, it begins processing the latest commit to the source location specified as part of the pipeline.
    @Sendable
    @inlinable
    public func startPipelineExecution(_ input: StartPipelineExecutionInput, logger: Logger = AWSClient.loggingDisabled) async throws -> StartPipelineExecutionOutput {
        try await self.client.execute(
            operation: "StartPipelineExecution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts the specified pipeline. Specifically, it begins processing the latest commit to the source location specified as part of the pipeline.
    ///
    /// Parameters:
    ///   - clientRequestToken: The system-generated unique ID used to identify a unique execution request.
    ///   - name: The name of the pipeline to start.
    ///   - sourceRevisions: A list that allows you to specify, or override, the source revision for a pipeline execution that's being started. A source revision is the version with all the changes to your application code, or source artifact, for the pipeline execution.
    ///   - variables: A list that overrides pipeline variables for a pipeline execution that's being started. Variable names must match [A-Za-z0-9@\-_]+, and the values can be anything except an empty string.
    ///   - logger: Logger use during operation
    @inlinable
    public func startPipelineExecution(
        clientRequestToken: String? = StartPipelineExecutionInput.idempotencyToken(),
        name: String,
        sourceRevisions: [SourceRevisionOverride]? = nil,
        variables: [PipelineVariable]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartPipelineExecutionOutput {
        let input = StartPipelineExecutionInput(
            clientRequestToken: clientRequestToken, 
            name: name, 
            sourceRevisions: sourceRevisions, 
            variables: variables
        )
        return try await self.startPipelineExecution(input, logger: logger)
    }

    /// Stops the specified pipeline execution. You choose to either stop the pipeline execution by completing in-progress actions without starting subsequent actions, or by abandoning in-progress actions. While completing or abandoning in-progress actions, the pipeline execution is in a Stopping state. After all in-progress actions are completed or abandoned, the pipeline execution is in a Stopped state.
    @Sendable
    @inlinable
    public func stopPipelineExecution(_ input: StopPipelineExecutionInput, logger: Logger = AWSClient.loggingDisabled) async throws -> StopPipelineExecutionOutput {
        try await self.client.execute(
            operation: "StopPipelineExecution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops the specified pipeline execution. You choose to either stop the pipeline execution by completing in-progress actions without starting subsequent actions, or by abandoning in-progress actions. While completing or abandoning in-progress actions, the pipeline execution is in a Stopping state. After all in-progress actions are completed or abandoned, the pipeline execution is in a Stopped state.
    ///
    /// Parameters:
    ///   - abandon: Use this option to stop the pipeline execution by abandoning, rather than finishing, in-progress actions.  This option can lead to failed or out-of-sequence tasks.
    ///   - pipelineExecutionId: The ID of the pipeline execution to be stopped in the current stage. Use the GetPipelineState action to retrieve the current pipelineExecutionId.
    ///   - pipelineName: The name of the pipeline to stop.
    ///   - reason: Use this option to enter comments, such as the reason the pipeline was stopped.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopPipelineExecution(
        abandon: Bool? = nil,
        pipelineExecutionId: String,
        pipelineName: String,
        reason: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopPipelineExecutionOutput {
        let input = StopPipelineExecutionInput(
            abandon: abandon, 
            pipelineExecutionId: pipelineExecutionId, 
            pipelineName: pipelineName, 
            reason: reason
        )
        return try await self.stopPipelineExecution(input, logger: logger)
    }

    /// Adds to or modifies the tags of the given resource. Tags are metadata that can be used to manage a resource.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceInput, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceOutput {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds to or modifies the tags of the given resource. Tags are metadata that can be used to manage a resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource you want to add tags to.
    ///   - tags: The tags you want to modify or add to the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [Tag],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceOutput {
        let input = TagResourceInput(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Removes tags from an Amazon Web Services resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceOutput {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes tags from an Amazon Web Services resource.
    ///
    /// Parameters:
    ///   - resourceArn:  The Amazon Resource Name (ARN) of the resource to remove tags from.
    ///   - tagKeys: The list of keys for the tags to be removed from the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceOutput {
        let input = UntagResourceInput(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Updates an action type that was created with any supported integration model, where the action type is to be used by customers of the action type provider. Use a JSON file with the action definition and UpdateActionType to provide the full structure.
    @Sendable
    @inlinable
    public func updateActionType(_ input: UpdateActionTypeInput, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "UpdateActionType", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an action type that was created with any supported integration model, where the action type is to be used by customers of the action type provider. Use a JSON file with the action definition and UpdateActionType to provide the full structure.
    ///
    /// Parameters:
    ///   - actionType: The action type definition for the action type to be updated.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateActionType(
        actionType: ActionTypeDeclaration,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = UpdateActionTypeInput(
            actionType: actionType
        )
        return try await self.updateActionType(input, logger: logger)
    }

    /// Updates a specified pipeline with edits or changes to its structure. Use a JSON file with the pipeline structure and UpdatePipeline to provide the full structure of the pipeline. Updating the pipeline increases the version number of the pipeline by 1.
    @Sendable
    @inlinable
    public func updatePipeline(_ input: UpdatePipelineInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdatePipelineOutput {
        try await self.client.execute(
            operation: "UpdatePipeline", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a specified pipeline with edits or changes to its structure. Use a JSON file with the pipeline structure and UpdatePipeline to provide the full structure of the pipeline. Updating the pipeline increases the version number of the pipeline by 1.
    ///
    /// Parameters:
    ///   - pipeline: The name of the pipeline to be updated.
    ///   - logger: Logger use during operation
    @inlinable
    public func updatePipeline(
        pipeline: PipelineDeclaration,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdatePipelineOutput {
        let input = UpdatePipelineInput(
            pipeline: pipeline
        )
        return try await self.updatePipeline(input, logger: logger)
    }
}

extension CodePipeline {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: CodePipeline, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension CodePipeline {
    /// Return PaginatorSequence for operation ``listActionExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listActionExecutionsPaginator(
        _ input: ListActionExecutionsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListActionExecutionsInput, ListActionExecutionsOutput> {
        return .init(
            input: input,
            command: self.listActionExecutions,
            inputKey: \ListActionExecutionsInput.nextToken,
            outputKey: \ListActionExecutionsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listActionExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Input information used to filter action execution history.
    ///   - maxResults: The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value. Action execution history is retained for up to 12 months, based on action execution start times. Default value is 100.
    ///   - pipelineName:  The name of the pipeline for which you want to list action execution history.
    ///   - logger: Logger used for logging
    @inlinable
    public func listActionExecutionsPaginator(
        filter: ActionExecutionFilter? = nil,
        maxResults: Int? = nil,
        pipelineName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListActionExecutionsInput, ListActionExecutionsOutput> {
        let input = ListActionExecutionsInput(
            filter: filter, 
            maxResults: maxResults, 
            pipelineName: pipelineName
        )
        return self.listActionExecutionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listActionTypes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listActionTypesPaginator(
        _ input: ListActionTypesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListActionTypesInput, ListActionTypesOutput> {
        return .init(
            input: input,
            command: self.listActionTypes,
            inputKey: \ListActionTypesInput.nextToken,
            outputKey: \ListActionTypesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listActionTypes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - actionOwnerFilter: Filters the list of action types to those created by a specified entity.
    ///   - regionFilter: The Region to filter on for the list of action types.
    ///   - logger: Logger used for logging
    @inlinable
    public func listActionTypesPaginator(
        actionOwnerFilter: ActionOwner? = nil,
        regionFilter: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListActionTypesInput, ListActionTypesOutput> {
        let input = ListActionTypesInput(
            actionOwnerFilter: actionOwnerFilter, 
            regionFilter: regionFilter
        )
        return self.listActionTypesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDeployActionExecutionTargets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDeployActionExecutionTargetsPaginator(
        _ input: ListDeployActionExecutionTargetsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDeployActionExecutionTargetsInput, ListDeployActionExecutionTargetsOutput> {
        return .init(
            input: input,
            command: self.listDeployActionExecutionTargets,
            inputKey: \ListDeployActionExecutionTargetsInput.nextToken,
            outputKey: \ListDeployActionExecutionTargetsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDeployActionExecutionTargets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - actionExecutionId: The execution ID for the deploy action.
    ///   - filters: Filters the targets for a specified deploy action.
    ///   - maxResults: The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value.
    ///   - pipelineName: The name of the pipeline with the deploy action.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDeployActionExecutionTargetsPaginator(
        actionExecutionId: String,
        filters: [TargetFilter]? = nil,
        maxResults: Int? = nil,
        pipelineName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDeployActionExecutionTargetsInput, ListDeployActionExecutionTargetsOutput> {
        let input = ListDeployActionExecutionTargetsInput(
            actionExecutionId: actionExecutionId, 
            filters: filters, 
            maxResults: maxResults, 
            pipelineName: pipelineName
        )
        return self.listDeployActionExecutionTargetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listPipelineExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listPipelineExecutionsPaginator(
        _ input: ListPipelineExecutionsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListPipelineExecutionsInput, ListPipelineExecutionsOutput> {
        return .init(
            input: input,
            command: self.listPipelineExecutions,
            inputKey: \ListPipelineExecutionsInput.nextToken,
            outputKey: \ListPipelineExecutionsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listPipelineExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: The pipeline execution to filter on.
    ///   - maxResults: The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value. Pipeline history is limited to the most recent 12 months, based on pipeline execution start times. Default value is 100.
    ///   - pipelineName: The name of the pipeline for which you want to get execution summary information.
    ///   - logger: Logger used for logging
    @inlinable
    public func listPipelineExecutionsPaginator(
        filter: PipelineExecutionFilter? = nil,
        maxResults: Int? = nil,
        pipelineName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListPipelineExecutionsInput, ListPipelineExecutionsOutput> {
        let input = ListPipelineExecutionsInput(
            filter: filter, 
            maxResults: maxResults, 
            pipelineName: pipelineName
        )
        return self.listPipelineExecutionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listPipelines(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listPipelinesPaginator(
        _ input: ListPipelinesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListPipelinesInput, ListPipelinesOutput> {
        return .init(
            input: input,
            command: self.listPipelines,
            inputKey: \ListPipelinesInput.nextToken,
            outputKey: \ListPipelinesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listPipelines(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of pipelines to return in a single call. To retrieve the remaining pipelines, make another call with the returned nextToken value. The minimum value you can specify is 1. The maximum accepted value is 1000.
    ///   - logger: Logger used for logging
    @inlinable
    public func listPipelinesPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListPipelinesInput, ListPipelinesOutput> {
        let input = ListPipelinesInput(
            maxResults: maxResults
        )
        return self.listPipelinesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRuleExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRuleExecutionsPaginator(
        _ input: ListRuleExecutionsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRuleExecutionsInput, ListRuleExecutionsOutput> {
        return .init(
            input: input,
            command: self.listRuleExecutions,
            inputKey: \ListRuleExecutionsInput.nextToken,
            outputKey: \ListRuleExecutionsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRuleExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Input information used to filter rule execution history.
    ///   - maxResults: The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value. Pipeline history is limited to the most recent 12 months, based on pipeline execution start times. Default value is 100.
    ///   - pipelineName: The name of the pipeline for which you want to get execution summary information.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRuleExecutionsPaginator(
        filter: RuleExecutionFilter? = nil,
        maxResults: Int? = nil,
        pipelineName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRuleExecutionsInput, ListRuleExecutionsOutput> {
        let input = ListRuleExecutionsInput(
            filter: filter, 
            maxResults: maxResults, 
            pipelineName: pipelineName
        )
        return self.listRuleExecutionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listTagsForResource(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listTagsForResourcePaginator(
        _ input: ListTagsForResourceInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListTagsForResourceInput, ListTagsForResourceOutput> {
        return .init(
            input: input,
            command: self.listTagsForResource,
            inputKey: \ListTagsForResourceInput.nextToken,
            outputKey: \ListTagsForResourceOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listTagsForResource(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return in a single call.
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource to get tags for.
    ///   - logger: Logger used for logging
    @inlinable
    public func listTagsForResourcePaginator(
        maxResults: Int? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListTagsForResourceInput, ListTagsForResourceOutput> {
        let input = ListTagsForResourceInput(
            maxResults: maxResults, 
            resourceArn: resourceArn
        )
        return self.listTagsForResourcePaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listWebhooks(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listWebhooksPaginator(
        _ input: ListWebhooksInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListWebhooksInput, ListWebhooksOutput> {
        return .init(
            input: input,
            command: self.listWebhooks,
            inputKey: \ListWebhooksInput.nextToken,
            outputKey: \ListWebhooksOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listWebhooks(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value.
    ///   - logger: Logger used for logging
    @inlinable
    public func listWebhooksPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListWebhooksInput, ListWebhooksOutput> {
        let input = ListWebhooksInput(
            maxResults: maxResults
        )
        return self.listWebhooksPaginator(input, logger: logger)
    }
}

extension CodePipeline.ListActionExecutionsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodePipeline.ListActionExecutionsInput {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token,
            pipelineName: self.pipelineName
        )
    }
}

extension CodePipeline.ListActionTypesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodePipeline.ListActionTypesInput {
        return .init(
            actionOwnerFilter: self.actionOwnerFilter,
            nextToken: token,
            regionFilter: self.regionFilter
        )
    }
}

extension CodePipeline.ListDeployActionExecutionTargetsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodePipeline.ListDeployActionExecutionTargetsInput {
        return .init(
            actionExecutionId: self.actionExecutionId,
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            pipelineName: self.pipelineName
        )
    }
}

extension CodePipeline.ListPipelineExecutionsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodePipeline.ListPipelineExecutionsInput {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token,
            pipelineName: self.pipelineName
        )
    }
}

extension CodePipeline.ListPipelinesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodePipeline.ListPipelinesInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension CodePipeline.ListRuleExecutionsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodePipeline.ListRuleExecutionsInput {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token,
            pipelineName: self.pipelineName
        )
    }
}

extension CodePipeline.ListTagsForResourceInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodePipeline.ListTagsForResourceInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            resourceArn: self.resourceArn
        )
    }
}

extension CodePipeline.ListWebhooksInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CodePipeline.ListWebhooksInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}
